/**
 * 应用入口文件
 * @format
 */

// 设置环境变量（默认开发环境）
if (!process.env.NODE_ENV) {
  process.env.NODE_ENV = "development";
}

const express = require("express");
const session = require("express-session");
const config = require("./config/environment");
const logger = require("./utils/logger");
const { errorHandler, notFoundHandler } = require("./middleware/errorHandler");

// 初始化数据库连接
require("./utils/database");

const app = express();
const port = config.server.port;
const path = require("path");

// 基础中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// Session配置
app.use(
  session({
    secret: config.session.secret,
    name: config.session.name,
    resave: false,
    saveUninitialized: false,
    cookie: {
      secure: config.session.secure,
      httpOnly: config.session.httpOnly,
      maxAge: config.session.maxAge,
    },
  })
);

// Session认证中间件
const { checkSessionAuth } = require("./utils/sessionAuth");
app.use(checkSessionAuth);

// 引入路由模块
const startRouter = require('./routes/start');
const userRouter = require('./routes/user');
const cbRouter = require('./routes/cb');
// 注册API路由
app.use('/serve/start', startRouter);
app.use('/serve/user', userRouter);
app.use('/serve/cb', cbRouter);

// 🌐 静态文件服务
app.use(express.static(path.join(__dirname, 'public')));

// 🌐 SPA路由fallback处理
app.use((req, res) => {
  const { path: reqPath } = req;
  
  // // API请求但路由不存在，返回404
  if (reqPath.startsWith('/serve/')) {
    return res.status(404).json({ error: 'API not found!' });
  }
  
  // 静态文件请求但文件不存在，返回404
  if (reqPath.includes('.')) {
    return res.status(404).send('File not found');
  }
  
  // 其他所有请求返回index.html（SPA路由）
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// 404处理
app.use(notFoundHandler);

// 全局错误处理（必须放在最后）
app.use(errorHandler);

// 启动服务器
app.listen(port, () => {
  logger.info(`服务器正在运行: http://localhost:${port}`);
  logger.info(`环境: ${config.server.env}`);
  logger.info(`日志级别: ${config.logger.level}`);
});
